home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
tex
/
texsrc.arc
/
TEX2.C
< prev
next >
Wrap
C/C++ Source or Header
|
1988-09-14
|
46KB
|
2,010 lines
overlay "tex2"
#define EXTERN extern
#include "texd.h"
#ifdef STAT
zshoweqtb ( n )
halfword n ;
{r_showeqtb
if ( n < 1 )
printchar ( 63 ) ;
else if ( n < 3526 )
{
sprintcs ( n ) ;
printchar ( 61 ) ;
printcmdchr ( eqtb [ n ] .hh.b0 , eqtb [ n ] .hh .v.RH ) ;
if ( eqtb [ n ] .hh.b0 >= 110 )
{
printchar ( 58 ) ;
showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ;
}
}
else if ( n < 4056 )
if ( n < 3544 )
{
printskippar ( n - 3526 ) ;
printchar ( 61 ) ;
if ( n < 3541 )
printspec ( eqtb [ n ] .hh .v.RH , 262 ) ;
else printspec ( eqtb [ n ] .hh .v.RH , 205 ) ;
}
else if ( n < 3800 )
{
printesc ( 260 ) ;
printint ( n - 3544 ) ;
printchar ( 61 ) ;
printspec ( eqtb [ n ] .hh .v.RH , 262 ) ;
}
else {
printesc ( 261 ) ;
printint ( n - 3800 ) ;
printchar ( 61 ) ;
printspec ( eqtb [ n ] .hh .v.RH , 205 ) ;
}
else if ( n < 5267 )
if ( n == 4056 )
{
printesc ( 273 ) ;
printchar ( 61 ) ;
if ( eqtb [ 4056 ] .hh .v.RH == 0 )
printchar ( 48 ) ;
else printint ( mem [(long) eqtb [ 4056 ] .hh .v.RH ] .hh .v.LH ) ;
}
else if ( n < 4066 )
{
printcmdchr ( 71 , n ) ;
printchar ( 61 ) ;
if ( eqtb [ n ] .hh .v.RH != 0 )
showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ;
}
else if ( n < 4322 )
{
printesc ( 272 ) ;
printint ( n - 4066 ) ;
printchar ( 61 ) ;
if ( eqtb [ n ] .hh .v.RH != 0 )
showtokenlis ( mem [(long) eqtb [ n ] .hh .v.RH ] .hh .v.RH , 0 , 32 ) ;
}
else if ( n < 4578 )
{
printesc ( 274 ) ;
printint ( n - 4322 ) ;
printchar ( 61 ) ;
if ( eqtb [ n ] .hh .v.RH == 0 )
print ( 275 ) ;
else {
depththresho = 0 ;
breadthmax = 1 ;
shownodelist ( eqtb [ n ] .hh .v.RH ) ;
}
}
else if ( n < 4627 )
{
if ( n == 4578 )
print ( 276 ) ;
else if ( n < 4595 )
{
printesc ( 277 ) ;
printint ( n - 4579 ) ;
}
else if ( n < 4611 )
{
printesc ( 278 ) ;
printint ( n - 4595 ) ;
}
else {
printesc ( 279 ) ;
printint ( n - 4611 ) ;
}
printchar ( 61 ) ;
printesc ( hash [ 3268 + eqtb [ n ] .hh .v.RH ] .v.RH ) ;
}
else if ( n < 5139 )
{
if ( n < 4755 )
{
printesc ( 280 ) ;
printint ( n - 4627 ) ;
}
else if ( n < 4883 )
{
printesc ( 281 ) ;
printint ( n - 4755 ) ;
}
else if ( n < 5011 )
{
printesc ( 282 ) ;
printint ( n - 4883 ) ;
}
else {
printesc ( 283 ) ;
printint ( n - 5011 ) ;
}
printchar ( 61 ) ;
printint ( eqtb [ n ] .hh .v.RH ) ;
}
else {
printesc ( 284 ) ;
printint ( n - 5139 ) ;
printchar ( 61 ) ;
printint ( eqtb [ n ] .hh .v.RH ) ;
}
else if ( n < 5701 )
{
if ( n < 5317 )
printparam ( n - 5267 ) ;
else if ( n < 5573 )
{
printesc ( 336 ) ;
printint ( n - 5317 ) ;
}
else {
printesc ( 337 ) ;
printint ( n - 5573 ) ;
}
printchar ( 61 ) ;
printint ( eqtb [ n ] .cint ) ;
}
else if ( n <= 5976 )
{
if ( n < 5721 )
printlengthp ( n - 5701 ) ;
else {
printesc ( 359 ) ;
printint ( n - 5721 ) ;
}
printchar ( 61 ) ;
printscaled ( eqtb [ n ] .cint ) ;
print ( 262 ) ;
}
else printchar ( 63 ) ;
}
#endif /* STAT */
halfword zidlookup ( j , l )
integer j , l ;
{/* 40 */ register halfword Result; r_idlookup
integer h ;
halfword p ;
halfword k ;
h = buffer [ j ] ;
for ( k = j + 1 ; k <= j + l - 1 ; k ++ )
{
h = h + h + buffer [ k ] ;
while ( h >= 2551 ) h = h - 2551 ;
}
p = h + 258 ;
while ( true ) {
if ( hash [ p ] .v.RH > 0 )
if ( ( strstart [ hash [ p ] .v.RH + 1 ] - strstart [ hash [ p ] .v.RH ] )
== l )
if ( streqbuf ( hash [ p ] .v.RH , j ) )
goto lab40 ;
if ( hash [ p ] .v.LH == 0 )
{
if ( nonewcontrol )
p = 3525 ;
else {
if ( hash [ p ] .v.RH > 0 )
{
do { if ( ( hashused == 258 ) )
overflow ( 362 , 3000 ) ;
decr ( hashused ) ;
} while ( ! ( hash [ hashused ] .v.RH == 0 ) ) ;
hash [ p ] .v.LH = hashused ;
p = hashused ;
}
{
if ( poolptr + l > poolsize )
overflow ( 128 , poolsize - initpoolptr ) ;
}
for ( k = j ; k <= j + l - 1 ; k ++ )
{
strpool [ poolptr ] = buffer [ k ] ;
incr ( poolptr ) ;
}
hash [ p ] .v.RH = makestring () ;
#ifdef STAT
incr ( cscount ) ;
#endif /* STAT */
}
goto lab40 ;
}
p = hash [ p ] .v.LH ;
}
lab40: Result = p ;
return(Result) ;
}
#ifdef INITEX
zprimitive ( s , c , o )
strnumber s ;
quarterword c ;
halfword o ;
{r_primitive
poolpointer k ;
smallnumber j ;
smallnumber l ;
if ( s < 128 )
curval = s + 129 ;
else {
k = strstart [ s ] ;
l = strstart [ s + 1 ] - k ;
for ( j = 0 ; j <= l - 1 ; j ++ )
buffer [ j ] = strpool [ k + j ] ;
curval = idlookup ( 0 , l ) ;
{
decr ( strptr ) ;
poolptr = strstart [ strptr ] ;
}
hash [ curval ] .v.RH = s ;
}
eqtb [ curval ] .hh.b1 = 1 ;
eqtb [ curval ] .hh.b0 = c ;
eqtb [ curval ] .hh .v.RH = o ;
}
#endif /* INITEX */
znewsavelevel ( c )
groupcode c ;
{r_newsavelevel
if ( saveptr > maxsavestack )
{
maxsavestack = saveptr ;
if ( maxsavestack > savesize - 6 )
overflow ( 399 , savesize ) ;
}
savestack [ saveptr ] .hh.b0 = 3 ;
savestack [ saveptr ] .hh.b1 = curgroup ;
savestack [ saveptr ] .hh .v.RH = curboundary ;
if ( curlevel == 255 )
overflow ( 400 , 255 ) ;
curboundary = saveptr ;
incr ( curlevel ) ;
incr ( saveptr ) ;
curgroup = c ;
}
zeqdestroy ( w )
memoryword w ;
{r_eqdestroy
halfword q ;
switch ( w .hh.b0 )
{case 110 :
case 111 :
case 112 :
case 113 :
deletetokenr ( w .hh .v.RH ) ;
break ;
case 116 :
deletegluere ( w .hh .v.RH ) ;
break ;
case 117 :
{
q = w .hh .v.RH ;
if ( q != 0 )
freenode ( q , mem [(long) q ] .hh .v.LH + mem [(long) q ] .hh .v.LH + 1 ) ;
}
break ;
case 118 :
flushnodelis ( w .hh .v.RH ) ;
break ;
default :
;
break ;
}
}
zeqsave ( p , l )
halfword p ;
quarterword l ;
{r_eqsave
if ( saveptr > maxsavestack )
{
maxsavestack = saveptr ;
if ( maxsavestack > savesize - 6 )
overflow ( 399 , savesize ) ;
}
if ( l == 0 )
savestack [ saveptr ] .hh.b0 = 1 ;
else {
savestack [ saveptr ] = eqtb [ p ] ;
incr ( saveptr ) ;
savestack [ saveptr ] .hh.b0 = 0 ;
}
savestack [ saveptr ] .hh.b1 = l ;
savestack [ saveptr ] .hh .v.RH = p ;
incr ( saveptr ) ;
}
zeqdefine ( p , t , e )
halfword p ;
quarterword t ;
halfword e ;
{r_eqdefine
if ( eqtb [ p ] .hh.b1 == curlevel )
eqdestroy ( eqtb [ p ] ) ;
else if ( curlevel > 1 )
eqsave ( p , eqtb [ p ] .hh.b1 ) ;
eqtb [ p ] .hh.b1 = curlevel ;
eqtb [ p ] .hh.b0 = t ;
eqtb [ p ] .hh .v.RH = e ;
}
zeqworddefine ( p , w )
halfword p ;
integer w ;
{r_eqworddefine
if ( xeqlevel [ p ] != curlevel )
{
eqsave ( p , xeqlevel [ p ] ) ;
xeqlevel [ p ] = curlevel ;
}
eqtb [ p ] .cint = w ;
}
zgeqdefine ( p , t , e )
halfword p ;
quarterword t ;
halfword e ;
{r_geqdefine
eqdestroy ( eqtb [ p ] ) ;
eqtb [ p ] .hh.b1 = 1 ;
eqtb [ p ] .hh.b0 = t ;
eqtb [ p ] .hh .v.RH = e ;
}
zgeqworddefin ( p , w )
halfword p ;
integer w ;
{r_geqworddefin
eqtb [ p ] .cint = w ;
xeqlevel [ p ] = 1 ;
}
zsaveforafter ( t )
halfword t ;
{r_sa